home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok18.lha / Profile / Demos / Prim2.mod < prev    next >
Text File  |  1993-08-15  |  1KB  |  42 lines

  1. MODULE Prim2;
  2.  
  3. FROM InOut IMPORT WriteInt;
  4.  
  5. CONST n = 1000;
  6.  
  7. VAR i,k: INTEGER;
  8.     prim: BOOLEAN;
  9.  
  10. PROCEDURE Sqrt(a: INTEGER): INTEGER;
  11. (* Der schnellste, mir bekannte Wurzel-Algorithmus.
  12.    Er prüft, in welchem Zahlenbereich a ist und nimmt davon ausgehend die
  13.    erste Näherung. Die Steigung der Wurzelfunktion in den verschiedenen
  14.    Bereichen wird als konstant angesehen. Das Ergebnis wird um 1 vermindert,
  15.    wenn es größer als sqr(a) ist, damit es mit trunc(sqrt(a)) übereinstimmt *)
  16.  
  17. VAR b: INTEGER;
  18.  
  19. BEGIN
  20.   IF    a<8H    THEN b := a DIV   4H +  1H;
  21.   ELSIF a<20H   THEN b := a DIV   8H +  2H;
  22.   ELSIF a<80H   THEN b := a DIV  19H +  4H;
  23.   ELSIF a<200H  THEN b := a DIV  20H +  8H;
  24.   ELSIF a<800H  THEN b := a DIV  40H + 10H;
  25.   ELSIF a<2000H THEN b := a DIV  80H + 20H;
  26.   ELSIF a<8000H THEN b := a DIV 100H + 40H;
  27.   ELSE               b := a DIV 200H + 80H END;
  28.   b := (b + a DIV b) DIV 2; IF b*b>a THEN DEC(b) END;
  29.   RETURN b;
  30. END Sqrt;
  31.  
  32. BEGIN
  33.   FOR i:=2 TO n DO
  34.     prim := TRUE;
  35.     FOR k:=2 TO Sqrt(i) DO
  36.       IF i MOD k = 0 THEN prim := FALSE END;
  37.     END;
  38.     IF prim THEN WriteInt(i,4) END;
  39.   END;
  40. END Prim2.
  41.  
  42.